Road Traffic Accident (RTA) is an unexpected event that unintentionally occurs on the road which involves vehicles and other road users that causes casualty or loss of property. We observe that while developed nations have stable or declining RTA death rates through coordinated rectifying actions from different departments, developing countries still lose 1–3% of their gross national product (GNP) due to traffic casualties. World Health Organization (WHO) fears, unless immediate action is taken, road crashes will climb to the 5th major cause of death by 2030, resulting in an estimated 2.4 million fatalities per year. Talking of India alone, around 1.5 lakh people lose their lives every year due to road accidents. We plan to study various datasets related to accidents in India. Our study will try to establish the relationship between statistics of vehicles, and statistics of following the traffic rules with the accidents.
In today’s world, Travel and transport have become an integral part of every human life. India has a well-knit and coordinated system of transportation, which plays a key role in developing economic activities by promoting the fair distribution of produced goods and services and the movement of people. Road transport in India is the most convenient mode of motion because it is relatively easier to build in every terrain and takes a lower construction cost than other methods such as railways. The fast-growing automobile sector has supported the demands generated by the constantly increasing Indian population. With an increase in the number of vehicles on the road, the risk of road accidents increases multifold and so is evident.
In a large country like India, approximately 1.5 lakh people died, and 4.51 lakh people were injured in road accidents in 2019.
from IPython.display import Image
Image(filename="assets/RoadAccidentsDeathsInjuries(in'000).png")
It can be inferred from above graph that the number of road accidents, injuries and deaths have increased signifincatly between 1990 to 2010. This has a strong correlation to the significant increase in vehicle population on roads and poor adherence to road safety laws. This time interval corrsponds to high economic growth period in India.
Analyzing the sources of road accidents revealed that most road accidents were held due to overspeeding, accounting for precisely 59.6% of total accidents (2,60,898 out of 4,37,443 cases), which caused 86,241 deaths and injuries to 2,71,581 persons. Keeping these numbers in mind, Ministry of Road Transport and Highways of India has set the speed limit to 80Kmph on National highways.
Dangerous/ Reckless driving and overtaking gave rise to 1,12,519 accidents (25.7% of total accidents), resulting in 42,557 deaths and injuries to 1,06,555 persons in 2019. This includes driving in a tired state of mind, distracted driving: talking on the phone /messaging/ eating while driving. The new traffic rules have included dangerous driving as an offense punishable under law. First-time offenders can be penalized an Imprisonment from 6 months to 1 year and/or a fine of Rs. 1000 to Rs. 5000.
2.6% (11,303 out of 4,37,443 cases) of such accidents occur due to poor weather conditions. Driving under the influence of drugs/alcohol contributed to 1.7% of total accidents, resulting in injuries to 6,675 persons & 2,972 deaths in the country.
from IPython.display import HTML
HTML('''<button type="button" class="btn btn-outline-danger" onclick="codeToggle();">Toggle Code</button>''')
In the following section, some statistics related to road accidents for different states and union territories of India is shown using a heamap in India's map.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import plotly.express as px
import plotly
plotly.offline.init_notebook_mode()
from urllib.request import urlopen
import json
# with urlopen('https://raw.githubusercontent.com/Subhash9325/GeoJson-Data-of-Indian-States/master/Indian_States') as response:
# counties = json.load(response)
with urlopen('https://raw.githubusercontent.com/nikhilkumarsingh/choropleth-python-tutorial/master/states_india.geojson') as response:
counties = json.load(response)
# Note that the loaded geoJSON must have an outermost key id. Note key id is not present here.
# So in the next loop a key is added.
for i in range(len(counties['features'])):
# Loop to add 'id' key
counties['features'][i]['id']=counties['features'][i]['properties']['st_nm']
# counties['features'][i]['id']=counties['features'][i]['properties']['NAME_1']
# print(counties["features"][0].keys())
names = []
for i in range(len(counties['features'])):
names.append(counties['features'][i]['id'])
df = pd.read_csv("data/NCRB_ADSI-2020_Table_1A.9.csv")
df = df[(df['Category']=='State') + (df['Category']=='Union Territories')]
# Note : In geoJSON data, there is no separate data for Ladakh and Jammu Kashmir. However, in csv file there are two separate rows.
# Therefore merging the rows of Ladakh and Jammu Kashmir in dataframe. Also in geoJSON file there are two places 'Daman & Diu'
# and 'Dadara & Nagar Havelli', however, there is only one row named 'D & N Haveli and Daman & Diu' in dataframe.
# Therefore a copy of that row is made and used for both the places.
id1=df.index[df['State/UT/City'] == 'Jammu & Kashmir'].tolist()[0]
id2=df.index[df['State/UT/City'] == 'Ladakh'].tolist()[0]
temp = df.loc[[id1,id2]]
temp = pd.concat([temp, (temp.sum(axis=0)).to_frame().transpose()])
temp = temp.drop(labels=[id1,id2],axis=0)
temp = temp.rename(index={0:id1})
temp.loc[id1,'Si. No.'] = str(id1)
temp.loc[id1,'Category'] = 'Union Territories'
temp.loc[id1,'State/UT/City'] = 'Jammu & Kashmir & Ladakh'
df = df.drop(labels=[id1,id2])
df = pd.concat([df,temp])
id1=df.index[df['State/UT/City'] == 'D & N Haveli and Daman & Diu'].tolist()[0]
temp = df.loc[id1].to_frame().transpose()
temp['State/UT/City']='D & N Haveli and Daman & Diu-2'
df = pd.concat([df,temp])
df = df.sort_values('State/UT/City', axis=0)
df.head()
df_cols = list(df.columns)
for i in range(3,len(df_cols)):
df[df_cols[i]]=df[df_cols[i]].astype('int64')
names.remove('NCT of Delhi')
names.append('Delhi')
names.sort()
# Create a dictionary to map state name of dataframe to geo location
df2geo = {}
df_name = list(df['State/UT/City'])
for i in range(df.shape[0]):
df2geo[df.iloc[i,2]]=names[i]
df2geo['Delhi (UT)']='NCT of Delhi'
df['name2geo']=df['State/UT/City'].map(df2geo)
fig1 = px.choropleth_mapbox(df, geojson=counties, locations='name2geo',
color='Grand Total - Died',
color_continuous_scale="Viridis",
mapbox_style="carto-positron",
zoom=3, center = {"lat": 20.5937, "lon": 78.9629},
opacity=0.5,
labels={'name2geo':'State/UT', 'Grand Total - Died':'Total Died'},
title="Distribution of accidents over states/UT for year 2020"
)
fig1.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
# df['Cases_per_popu'] = (1000*df['Grand Total - Cases']).div(df['Population'])
# fig2 = px.choropleth_mapbox(df, geojson=counties, locations='name2geo',
# color='Cases_per_popu',
# color_continuous_scale="Viridis",
# mapbox_style="carto-positron",
# zoom=3, center = {"lat": 20.5937, "lon": 78.9629},
# opacity=0.5,
# labels={'name2geo':'State/UT', 'Cases_per_popu':"Cases normalized by population(in '000s)"},
# title="Distribution of accidents over states/UT for year 2020"
# )
# fig2.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
## TO REDUCE THE SIZE OF NOTEBOOK , INSTEAD OF RENDERING MAP, A SNAPSHOT IS INSERTED
from IPython.display import Image
Image(filename="assets/cases_norm_popu.png")
# df['Cases_per_popu'] = (100*df['Grand Total - Cases']).div(df['Population'].div(df['Density']))
# fig3 = px.choropleth_mapbox(df, geojson=counties, locations='name2geo',
# color='Cases_per_popu',
# color_continuous_scale="Viridis",
# mapbox_style="carto-positron",
# zoom=3, center = {"lat": 20.5937, "lon": 78.9629},
# opacity=0.5,
# labels={'name2geo':'State/UT', 'Cases_per_popu':'Cases normalized by area(in 100 sqkms)'},
# title="Distribution of accidents over states/UT for year 2020"
# )
# fig3.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
## TO REDUCE THE SIZE OF NOTEBOOK , INSTEAD OF RENDERING MAP, A SNAPSHOT IS INSERTED
from IPython.display import Image
Image(filename="assets/cases_norm_area.png")
From the heatmaps, it can be inferred that the number of accidents and number of deaths in accidents have a good corellation with the population of state. For instance Uttarpradesh has highest population and also it has highest number of deaths in road accidents. Moreover, from Figure : 3 which is the heatmap of number of accidents cases normalized by population, it can be inferred that normalized number of cases is approximately similar across all states. Moreover , the distribution of cases normalized by the area is even more similar across all states.
A total of 69,064 traffic accidents were reported in 53 cities during 2019. 69,064 traffic accidents caused injuries to 59,070 persons and 16,538 deaths. During this time period, Delhi City reported the maximum number of fatalities in traffic accidents (2,207 deaths), followed by Chennai (1,252 deaths) and Jaipur (859 deaths). According to the classification of road accidents road-wise, 20.8% of total road accidents in 53 mega cities were reported on the National Highways and 27.4% of fatalities in road accidents were reported on the National Highways during 2019.
from IPython.display import Image
Image(filename="assets/RoadAccidentsDeaths_and_Injuries.png")
The number of deaths per year remained constant at around 1.45 lakhs/year. From the below graph it can be said that the increase in deaths is not amount to vehicle population. we can see a declining curve which indicates a reduced number of accidents and injuries with an increase in the total running vehicles on the road. Also from Figure:1, one can draw inference that 1/5th of accidents ends up in life loss, but that is not the true case as data for number of accidents is not correctly recorded. Most of the accidents go unrecorded in any offical records.
from IPython.display import YouTubeVideo
YouTubeVideo('V7UM4KNodaU', width=800, height=300)
During 2019, two-wheelers accounted for the maximum number of lethal road accidents, contributing to about 38% of total road accidental deaths, followed by trucks/lorries. This raises a question mark on account of the two-wheeler drivers' safety. Based on this data, the government has started running different campaigns regarding driving safely. Also, the traffic police has started frequent checks to ensure that riders wear the required safety equipments and offenders are penalized to ensure a safe driving environment for all. Statistics show that the use of helmets can reduce the risk of head injuries by 69% and thus reduce 42% of injuries leading to fatality of two-wheeler riders.
Wearing helmet/seatbelt: It makes sense that wearing seatbelts can reduce the risk of fatal injuries, but people don’t practice these actions because of lack of awarness. According to a WHO survey wearing a seatbelt can reduce fatal injuries by 50% in front seat occupants and around 25% in rear seat occupants. Also, we rarely observe any child restraints in India which alone can reduce 60% casualties.
It is our responsibility to give way to emergency services vehicles such as fire engines and ambulances. This will ensure faster support reaches to the affected site.
Traffic signs need to be put forward clearly,Signboards should be coloured brightly so that they come to notice.Roads should have clear signs related to zebra crossing, school ahead etc.
Every other day we read a news article that states about a crash on the national highway, fatal enough to take away the life of a prominent member of the family and sometimes wipes out 5-10 people of the same family leaving a dent in the whole family for years to come. The accident at times takes away the sole breadwinner of the family ruining the family’s financial conditions as well.
India each year loses about 1.5 lakh of its people to road accidents every year. This population accounts for 11% of road accidents deaths around the globe. The socio-economic cost associated with road accidents annually accounts for 0.77% of India's GDP, which sums up to 1,47,114 crores. Thus, it becomes utterly imminent to establish appropriate road safety infrastructure and strict implementation of road safety laws.
We have utilized several dataset related to road accidents and safety, which are available at government of India website. ( https://data.gov.in/catalogs , https://www.who.int/data/gho/data/themes/road-safety ) This consist of year wise distribution, statewise distribution and some other statistics such asyear wise population, vehicle population etc used for normalisation.